package com.it.demo.entity;

import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

import java.util.Collection;

// 使用Lombok库的@Data注解，自动生成getter、setter、equals、hashCode和toString方法
// 同样使用@NoArgsConstructor注解，自动生成无参构造函数
@Data
@NoArgsConstructor
public class SecurityUser implements UserDetails {

    // 使用聚合模式，将我们自己的User对象聚合到SecurityUser中
    // user字段存储了用户的一些信息，例如用户名和密码等
    private User user;

    // 覆盖UserDetails接口中的getAuthorities方法，返回用户的权限集合
    // 这里返回null，表示未实现获取权限的逻辑
    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return null;
    }

    // 覆盖UserDetails接口中的getPassword方法，返回用户的密码
    // 这里通过调用user对象的getPwd方法获取密码
    @Override
    public String getPassword() {
        return user.getPwd();
    }

    // 覆盖UserDetails接口中的getUsername方法，返回用户的用户名
    // 这里通过调用user对象的getUserName方法获取用户名，并注释说明有的地方可能会用email作为用户名，这里还是使用userName
    @Override
    public String getUsername() {
        // 用户名：有的地方可能会用email作为用户名，我们这还是userName
        return user.getUserName();
    }

    // 覆盖UserDetails接口中的isAccountNonExpired方法，判断账户是否过期
    // 这里直接返回true，表示账户不过期
    @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    // 覆盖UserDetails接口中的isAccountNonLocked方法，判断账户是否被锁定
    // 这里直接返回true，表示账户未被锁定
    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    // 覆盖UserDetails接口中的isCredentialsNonExpired方法，判断凭证是否过期
    // 这里直接返回true，表示凭证不过期
    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }

    // 覆盖UserDetails接口中的isEnabled方法，判断用户是否启用
    // 这里直接返回true，表示用户启用状态为true
    @Override
    public boolean isEnabled() {
        return true;
    }
}

